10491. Коровы и машины
Рассмотрим следующую телеигру. Имеется три двери, за двумя из которых спрятано по корове, а за
третьими – приз. Игрок выбирает дверь, стараясь угадать, где находится приз.
Ведущий после выбора игроком двери предлагает следующую сделку: он согласен
открыть некоторую дверь, за которой находится корова в обмен на то, что игрок
сменит дверь (поменяет свое мнение). Известно, что при смене мнения игрока
вероятность выиграть приз составляет 2/3. В задаче обобщается эта игра. На вход
подаются количество коров ncows, призов
ncars и дверей nshow, открывающихся ведущим при смене мнения игрока. Найти
вероятность выигрыша игрока, если он всегда меняет свое мнение. Известно, что
за каждой дверью спрятана или корова, или приз.
Вход. Состоит из нескольких тестов. Каждый тест
содержит три целых числа ncows, ncars, nshow (1 £ cows, cars £ 10000, 0 £ shown < cows).
Выход. Для каждого теста вывести в отдельной строке
вероятность выигрыша игрока, если после предложения
ведущего он сменит свое мнение. Ответ выводить с 5 десятичными знаками.
2 1 1
5 3 2
2000 2700 900
0.66667
0.52500
0.71056
вероятность
Для решения задачи следует записать формулу
условной вероятности.
Число дверей равно doors = cows
+ cars. Вероятность сначала угадать корову составляет cows / doors,
машину – cars / doors. После смены мнения и открытия дверей с shown
коровами игрок может выбирать приз среди doors – shown – 1
закрытых дверей. Пусть вначале игрок указал на корову. Тогда среди закрытых
дверей имеется cars машин, и вероятность ее выигрыша составляет
cars / (doors – shown – 1)
Если вначале игрок указал на машину, то
среди закрытых дверей осталось cars – 1 машин и вероятность ее выигрыша
составляет
(cars – 1) / (doors – shown
– 1)
Результирующая вероятность выиграть машину
равна
(cows / doors) * (cars /
(doors – shown – 1)) + (cars / doors) * ((cars
– 1) / (doors – shown – 1))
= (cows * cars + cars *
(cars – 1)) / (doors * (doors – shown – 1)).
Рассмотрим первый тест. В игре имеются 3
двери. Если сначала игрок укажет на дверь с призом (вероятность 1/3), то после
смены мнения он проиграет. Если сначала будет выбрана дверь с коровой
(вероятность 2/3), то после открытия двери с коровой и смены мнения игрок
непременно попадет на дверь с призом и выиграет. Таким образом, вероятность выигрыша
составит 1/3 * 0 + 2/3 * 1 = 2/3.
Читаем входные данные, вычисляем чисто
дверей doors, находим ответ по выше приведенной формуле и выводим его.
Поскольку входные данные целые, то чтобы избежать потери точности при делении,
следует делимое перевести в действительный тип, умножив его на 1.0.
while(scanf("%d
%d %d",&cows,&cars,&shown) == 3)
{
doors = cows + cars;
res = 1.0*((cars-1)*cars +
cars*cows)/(doors*(doors-shown-1));
printf("%.5lf\n",res);
}